package com.nd.android.u.ui.chatInterfaceImpl;


import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.ImageView;

import com.common.android.utils.task.genericTask.TaskResult;
import com.product.android.commonInterface.chat.ErpInfo;
import com.product.android.commonInterface.chat.IGroupReceiveSettingListener;
import com.product.android.commonInterface.chat.SearchContract;
import com.product.android.commonInterface.contact.OapApp;
import com.product.android.commonInterface.contact.OapUser;
import com.product.android.commonInterface.weibo.FlowerMessageInfo;
import com.product.android.commonInterface.weibo.ISendFlowerDialogListener;

/**
 * ClassName:ChatOutEntry
 * Function: 聊天工程出口,所有聊天工程调用外部工程的方法都在这里,避免聊天工程内部的类与工程外部的类产生耦合
 * Reason:	 
 * @author   cb		
 * @version  Ver 1.3.3_modularization
 * @Date	 2014	2014-1-28		上午11:08:43
 * @see 	 
 */
public interface IChatCallOtherModel_UI {
	
	/**
	 * 打开私聊设置界面
	 * 
	 * <br>Created 2014-11-18 下午9:30:32
	 * @param context 上下文
	 * @param userId 用户ID
	 * @author        :  HuangYK
	 */
	void gotoChatPrivateActivity(Context context, long userId);
	
	/**
	 * 设置群头像
	 * 
	 * <br>Created 2014-11-17 下午4:15:30
	 * @param context 上下文
	 * @param groupId 群ID
	 * @param ivGroupAvator 头像控件
	 * @author        :  HuangYK
	 */
	void setGroupAvator(Context context, ImageView ivGroupAvator, long groupId);
	
	/**
	 * 跳转到个人空间
	 * 
	 * <br>Created 2014-11-13 下午6:35:47
	 * @param context 上下文
	 * @param userId 用户ID
	 * @author        :  HuangYK
	 */
	void gotoPersonalDynamicActivity(Context context, long userId);
	
	/**
	 * 跳转添加成员页面
	 * <br>
	 * Created 2014-7-10 下午11:16:05
	 * @param context 上下文
	 * @param iMode 跳转模式
	 * @author : linsj
	 */
	void gotoAddGroupMemberActivity(Context context, int iMode);

	/**
	 * 跳转添加好友页面
	 * <br>
	 * Created 2014-7-10 下午11:17:02
	 * @param context 上下文
	 * @author : linsj
	 */
	void gotoAddFriendActivity(Context context);

	/**
	 * @n<b>函数名称</b> :addFriend
	 * @brief 添加某个人为好友
	 * @version Ver 1.0.0
	 * @param activity
	 * @param fid
	 * @param name
	 
	 * @<b>作者</b> : cb
	 * @<b>创建时间</b> : 2014-4-11下午4:54:12
	 */
	void addFriend(Activity activity, long fid, String name);

	/**
	 * @n<b>函数名称</b>     :getTweetProfileActivity
	 * @brief 朋友友圈首页
	 * @version    Ver 1.3.3_modularization
	 * @param  @return
	 * @return Class<?>
	 * @<b>作者</b>          :  cb
	 * @<b>创建时间</b>      :  2014-2-13上午9:13:16      
	*/
	void gotoTweetProfileActivity(Context context,long fid);
	
	/**
	 * @n<b>函数名称</b>     :addFriend
	 * @brief 添加关注(后台线程)
	 * @version    Ver 1.3.3_modularization
	 * @param fid 好友的UID
	 * @return TaskResult
	 * @<b>作者</b>          :  cb
	 * @<b>创建时间</b>      :  2014-2-8上午11:23:54      
	*/
	TaskResult addFriendWeiBo(long fid);
	
	/**
	 * 添加OAP好友
	 * <br>Created 2014-9-6 下午5:37:59
	 * @param fid 好友的UID
	 * @return TaskResult
	 * @author  cb
	*/
	TaskResult addFriendOap(long fid);
	
	/**
	 * @n<b>函数名称</b>     :getThanksFlowerMessage
	 * @brief 获取鲜花答谢留言
	 * @version    Ver 1.3.3_modularization
	 * @param map
	 
	 * @<b>作者</b>          :  cb
	 * @<b>创建时间</b>      :  2014-3-3下午1:48:49      
	*/
	FlowerMessageInfo getThanksFlowerMessage();
	
	/**
	 * @n<b>函数名称</b>     :showSendFlowerDialog
	 * @brief 弹出送花对话框
	 * @version    Ver 1.3.3_modularization
	 * @param context
	 * @param fid
	 
	 * @<b>作者</b>          :  cb
	 * @<b>创建时间</b>      :  2014-3-3下午1:54:01      
	*/
	void showSendFlowerDialog(Context activity,long fid,ISendFlowerDialogListener listener);
	
	/**
	 * @n<b>函数名称</b>     :getFlowerMessage
	 * @brief 获取索要鲜花留言
	 * @version    Ver 1.3.3_modularization
	 * @param info
	 * @param fid
	 
	 * @<b>作者</b>          :  cb
	 * @<b>创建时间</b>      :  2014-3-3下午1:59:08      
	*/
	FlowerMessageInfo getFlowerMessage(long fid);

	/**
	 * @n<b>函数名称</b>     :showGroupMessageReceiveSettingDialog
	 * @brief 显示群组消息接收设置对话框
	 * @version    Ver 1.3.3_modularization
	 * @param context
	 * @param permission
	 
	 * @<b>作者</b>          :  cb
	 * @<b>创建时间</b>      :  2014-2-26下午7:54:53      
	*/
	void showGroupMessageReceiveSettingDialog(Context context,int permission,IGroupReceiveSettingListener listener);
	
	/**
	 * @n<b>函数名称</b>     :addToBlackList
	 * @brief 加入黑名单
	 * @version    Ver 1.3.3_modularization
	 * @param fid
	 * @param  @return
	 * @return boolean
	 * @<b>作者</b>          :  cb
	 * @<b>创建时间</b>      :  2014-2-8下午3:37:48      
	*/
	boolean addToBlackList(long fid);
	
	/**
	 * @n<b>函数名称</b>     :delFromBlackList
	 * @brief 从黑名单里移除
	 * @version    Ver 1.3.3_modularization
	 * @param fid
	 * @param  @return
	 * @return boolean
	 * @<b>作者</b>          :  cb
	 * @<b>创建时间</b>      :  2014-2-8下午3:37:57      
	*/
	boolean delFromBlackList(long fid);
	
	/**
	 * 讨论组管理
	 * <br>Created 2014-9-6 下午5:38:24
	 * @param context 上下文
	 * @param bundle 数据
	 * @author  cb
	*/
	void gotoDiscussionManagerActivity(Context context,Bundle bundle);
	
	/**
	 * 群组管理
	 * <br>Created 2014-9-6 下午5:38:41
	 * @param context 上下文
	 * @param bundle 数据
	 * @author  cb
	*/
	void gotoGroupManagerActivity(Context context,Bundle bundle);

	/**
	 * @n<b>函数名称</b>     :gotoSelectUserActivity
	 * @brief   创建讨论组时选择用户
	 * @see
	 * @since    Ver 1.3.0
	 * @param context
	 * @param fid
	 * @param selectType  当前点击的是哪个tab， 直接切到该tab
	 * @param is_talk
	 
	 * @<b>作者</b>          :  daiyf
	 * @<b>创建时间</b>      :  2014-4-14上午11:39:02      
	*/
	void gotoSelectUserActivity(Context context,long fid, int selectType, boolean is_talk);
	
	
	/**
	 * 打开搜索朋友界面
	 * 
	 * <br>Created 2014-11-4 下午6:27:39
	 * @param context 上下文
	 * @author        :  HuangYK
	 */
	void gotoSearchUserActivity(Context context);
	
	/**
	 * @n<b>函数名称</b>     :searchFilterContracByKey
	 * @brief 根据关键字搜索用户
	 * @version    Ver 1.3.3_modularization
	 * @param uid
	 * @param pageNo
	 * @param pageSize
	 * @param key
	 * @param filter
	 * @param  @return
	 * @return List<SearchContract>
	 * @<b>作者</b>          :  cb
	 * @<b>创建时间</b>      :  2014-2-7下午6:11:20      
	*/
	
	List<SearchContract> searchFilterContracByKey(
			long uid, 
			int pageNo, 
			int pageSize, 
			String key,
			ArrayList<Long> filter);
	
	
	/**
	 * @n<b>函数名称</b>     :getOapUser
	 * @brief 获取OapUser数据，如果本地没有，会去网络上取，耗时操作，被调方未开线程
	 * @version    Ver 1.3.3_modularization
	 * @param fid
	 
	 * @<b>作者</b>          :  cb
	 * @<b>创建时间</b>      :  2014-3-3下午2:30:19      
	*/
	OapUser getOapUserFromServer(long fid);
	
	/**
	 * 获取OAPUSER
	 * @n<b>函数名称</b>     :getOapUser
	 * @brief
	 * @see
	 * @since    Ver 1.1
	 * @param uid
	 * @param  @return
	 * @return OapUser
	 * @<b>作者</b>          :  黄永鑫
	 * @<b>创建时间</b>      :  2014-2-25下午3:21:56
	 */
	OapUser getOapUser(long uid);
	
	/**
	 * @n<b>函数名称</b>     :agreeToAddFriend
	 * @brief 同意添加好友
	 * @version    Ver 1.3.3_modularization
	 * @param fid
	 * @param  @return
	 * @return TaskResult
	 * @<b>作者</b>          :  cb
	 * @<b>创建时间</b>      :  2014-2-11下午6:20:18      
	*/
	TaskResult agreeToAddFriend(long fid);
	
	/**
	 * @n<b>函数名称</b>     :deleteFriend
	 * @brief 删除微博好友
	 * @version    Ver 1.3.3_modularization
	 * @param fid
	 
	 * @<b>作者</b>          :  cb
	 * @<b>创建时间</b>      :  2014-2-8上午11:35:51      
	*/
	TaskResult deleteFriendWeiBo(long fid);
	
	/**
	 * 删除OAP好友
	 * <br>Created 2014-9-6 下午5:46:32
	 * @param fid 好友 的UID
	 * @return 操作结果
	 * @author  cb
	*/
	TaskResult deleteFriendOap(long fid);
	
	/**
	 * 
	 * @n<b>函数名称</b>     :openAddFriendRequestDialog
	 * @brief
	 * @see
	 * @since    Ver 1.1
	 * @param ctx
	 * @param user
	 
	 * @<b>作者</b>          :  黄永鑫
	 * @<b>创建时间</b>      :  2014-2-25下午2:59:13
	 */
	void openAddFriendRequestDialog(Context ctx, OapUser user);
	
	/**
	 * 
	 * @n<b>函数名称</b>     :openAddFriendFollowRequestDialog
	 * @brief
	 * @see
	 * @since    Ver 1.1
	 * @param ctx
	 * @param user
	 
	 * @<b>作者</b>          :  黄永鑫
	 * @<b>创建时间</b>      :  2014-2-25下午2:59:44
	 */
    void openAddFriendFollowRequestDialog(Context ctx, OapUser user);
    
	/**
	 * @n<b>函数名称</b>     :isInstallApp
	 * @brief 该应用是否已安装
	 * @version    Ver 1.3.3_modularization
	 * @param oapApp
	 * @param  @return
	 * @return boolean
	 * @<b>作者</b>          :  cb
	 * @<b>创建时间</b>      :  2014-1-29上午10:16:58      
	*/
	boolean isInstallApp(OapApp oapApp);
	
	/**
	 * @n<b>函数名称</b>     :showAppDialog
	 * @brief 弹出对话框
	 * @version    Ver 1.3.3_modularization
	 * @param app
	 * @param context
	 
	 * @<b>作者</b>          :  cb
	 * @<b>创建时间</b>      :  2014-1-29上午10:41:50      
	*/
	void showAppDialog(OapApp app,Context context);
	/**
	 * @n<b>函数名称</b>     :getApplistById
	 * @brief 获取应用消息列表
	 * @version    Ver 1.3.3_modularization
	 * @param appid
	 * @param  @return
	 * @return ArrayList<OapApp>
	 * @<b>作者</b>          :  cb
	 * @<b>创建时间</b>      :  2014-1-29上午10:42:28      
	*/
	
	ArrayList<OapApp> getApplistById(int appid);
	
	/**
	 * @n<b>函数名称</b>     :getAppName
	 * @brief 获取应用的名称
	 * @version    Ver 1.3.3_modularization
	 * @param appid
	 * @param code
	 * @param  @return
	 * @return String
	 * @<b>作者</b>          :  cb
	 * @<b>创建时间</b>      :  2014-2-11下午7:49:20      
	*/
	String getAppName(int appid,String code);

	/**
	 * @n<b>函数名称</b>     :jumpActivity
	 * @brief 应用消息在消息列表里点击后跳转到其它界面
	 * @version    Ver 1.3.3_modularization
	 * @param appid
	 * @param permcode
	 * @param bussid
	 * @param ctx
	 * @param returndesk
	 
	 * @<b>作者</b>          :  cb
	 * @<b>创建时间</b>      :  2014-1-29上午10:28:56      
	*/
	void jumpActivity(int appid,String permcode , String  bussid ,Context ctx,boolean returndesk);

	/**
	 * @n<b>函数名称</b>     :allocateTask
	 * @brief 下单
	 * @version    Ver 1.3.3_modularization
	 * @param context  上下文
	 * @param fid	下单对象的UID
	 * @param comment 下单的内容
	 * @<b>作者</b>          :  cb
	 * @<b>创建时间</b>      :  2014-3-3下午1:37:47      
	*/
	void allocateTask(Context context,long fid,String comment);
	
	/**
	 * @n<b>函数名称</b>     :acceptTask
	 * @brief 接单
	 * @version    Ver 1.3.3_modularization
	 * @param context 上下文
	 * @param erpInfo erp消息内容
	 * @<b>作者</b>          :  cb
	 * @<b>创建时间</b>      :  2014-3-3下午1:44:12      
	*/
	void acceptTask(Context context,ErpInfo erpInfo);
	
	/**
	 * @n<b>函数名称</b>     :finishTask
	 * @brief 结单
	 * @version    Ver 1.3.3_modularization
	 * @param context 上下文
	 * @param erpInfo erp消息内容
	 * @<b>作者</b>          :  cb
	 * @<b>创建时间</b>      :  2014-3-3下午1:44:21      
	*/
	void finishTask(Context context,ErpInfo erpInfo);
	
	/**
	 * 查看单据详情
	 * <br>Created 2014-9-6 下午5:47:11
	 * @param context 上下文
	 * @param erpInfo erp消息内容
	 * @author  cb
	*/
	void viewDetail(Context context,ErpInfo erpInfo);
	
	/**
	 * 接受延单
	 * <br>Created 2014-7-14 下午2:04:13
	 * @param context 上下文
	 * @param erpInfo erp消息内容
	 * @author       cb
	*/
	void acceptDelay(Context context,ErpInfo erpInfo);
}
